Oracle DB DBA系
Oracle DB DBA系(Oracle DB DBA)
インスタンス/データベース情報
code:sql
-- 基本情報
SELECT instance_name, host_name, version, status, startup_time
FROM v$instance;
SELECT name AS db_name, dbid, open_mode, database_role, platform_name
FROM v$database;
-- 初期化パラメータ(差分や検索)
SELECT name, value, issys_modifiable, isdefault
FROM v$parameter
WHERE LOWER(name) LIKE '%sga%' ORDER BY name;
-- SPFILE由来だけ
SELECT name, value FROM v$spparameter WHERE isspecified = 'TRUE';
コンテナ・データベース(CDB)/プラガブルデータベース(PDB)
code:sql
-- どのPDBが開いているか
SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
-- CDB配下全PDBへ集約(12c+)
SELECT * FROM CONTAINERS(v$tablespace);
-- セッションを特定CDB/PDBへ切り替え
-- ALTER SESSION SET CONTAINER = <cdb_name | application_container_name | pdb_name>;
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER SESSION SET CONTAINER = PDB01;
code:sql
-- CDB情報表示
SQL> show con_name
-- PDB情報表示
SQL> show pdbs
-- or
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;
ストレージ/表領域/データファイル
code:sql
-- 例: users 用に 1GB, 自動拡張
CREATE TABLESPACE app_ts
DATAFILE 'app_ts01.dbf' SIZE 1G AUTOEXTEND ON NEXT 128M MAXSIZE UNLIMITED;
-- 一時表領域
-- CREATE TEMPORARY TABLESPACE app_temp TEMPFILE 'app_temp01.dbf' SIZE 512M AUTOEXTEND ON;
-- 表領域使用率(ワンライナー)
SELECT ts.tablespace_name,
ROUND((used.bytes/ts.bytes)*100,2) AS used_pct,
ROUND(ts.bytes/1024/1024) AS mb_total,
ROUND(used.bytes/1024/1024) AS mb_used,
ROUND((ts.bytes - used.bytes)/1024/1024) AS mb_free
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) ts
JOIN (SELECT tablespace_name, SUM(bytes) bytes FROM dba_segments GROUP BY tablespace_name) used
ON ts.tablespace_name = used.tablespace_name
ORDER BY used_pct DESC;
-- TEMP使用状況
SELECT tablespace_name, SUM(used_blocks)*8/1024 AS mb_used
FROM v$sort_segment GROUP BY tablespace_name;
-- データファイル一覧
SELECT file_id, tablespace_name, bytes/1024/1024 AS mb, autoextensible, maxbytes/1024/1024 AS mb_max, file_name
FROM dba_data_files ORDER BY tablespace_name, file_id;
ユーザー/権限/ロール
code:sql
-- ユーザー一覧(ロック/有効期限)
SELECT username, account_status, lock_date, expiry_date, default_tablespace, temporary_tablespace
FROM dba_users
-- WHERE username = 'SCOTT'
ORDER BY username;
SELECT * FROM dba_users
-- WHERE username = 'SCOTT'
ORDER BY username;
-- システム権限
SELECT grantee, privilege, admin_option FROM dba_sys_privs WHERE grantee = 'SCOTT';
-- ロール
SELECT grantee, granted_role, admin_option, default_role FROM dba_role_privs WHERE grantee = 'SCOTT';
-- オブジェクト権限
SELECT grantee, owner, table_name, privilege FROM dba_tab_privs WHERE grantee = 'SCOTT';
ユーザー作成
code:sql
-- 要テーブルスペース作成
CREATE USER scott
IDENTIFIED BY 'password' -- パスワード
DEFAULT TABLESPACE example -- テーブルスペース
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PASSWORD EXPIRE;
GRANT CREATE SESSION TO scott;
-- CONNECTロール: CREATE SESSION
-- RESOURCE: CREATE TABLEなど開発者向けの操作権限
-- GRANT CONNECT, RESOURCE to scott;
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER, CREATE SYNONYM TO scott;
-- 共通ユーザー作成
-- CDB/PDBから共通ユーザーかローカルユーザーかを設計しないといけない
-- c##, C##はCOMMON_USER_PREFIXと呼ばれる
CREATE USER c##scott
IDENTIFIED BY "password"
DEFAULT TABLESPACE example
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PASSWORD UNLIMITED
;
-- PDBへの切り替え
ALTER SESSION SET CONTAINER = PDB01;
-- ローカル・ユーザー作成
CREATE USER scott
IDENTIFIED BY 'password'
DEFAULT TABLESPACE example
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PASSWORD UNLIMITED
;
-- ユーザー削除(PDB 内で)
DROP USER scott CASCADE;
code:sql
-- プロファイル確認
SELECT username, profile FROM dba_users WHERE username = 'SCOTT';
-- プロファイルのパスワード有効期限を確認
SELECT * FROM dba_profiles
WHERE resource_name = 'PASSWORD_LIFE_TIME';
-- DEFAULTプロファイルのパスワード有効期限を確認
SELECT * FROM dba_profiles
WHERE resource_name = 'PASSWORD_LIFE_TIME' AND profile = 'DEFAULT';
-- ALTER USER ユーザー名
-- プロファイルのパスワード有効期限変更
ALTER PROFILE DEFAULT LIMIT password_life_time unlimited;
code:sql
-- 現在のセッション
SELECT s.sid, s.serial#, s.username, s.program, s.status, s.machine, s.module, s.event, s.wait_class
FROM v$session s
WHERE s.type = 'USER' ORDER BY s.status, s.username;
-- ロック状況(ブロッカーと待ち)
SELECT s1.sid AS blocker_sid, s2.sid AS waiter_sid, l1.type, l1.id1, l1.id2
FROM v$lock l1 JOIN v$lock l2 ON l1.id1 = l2.id1 AND l1.id2 = l2.id2 AND l1.block = 1 AND l2.request > 0
JOIN v$session s1 ON s1.sid = l1.sid
JOIN v$session s2 ON s2.sid = l2.sid;
-- どのオブジェクトがロックされているか
SELECT s.sid, s.serial#, o.object_name, o.object_type, l.locked_mode
FROM v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid
ORDER BY s.sid;
-- セッションキル(必要時のみ慎重に)
-- ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
バックアップ/リカバリの前提確認(SQL側視点)
code:sql
-- アーカイブログモード
SELECT log_mode FROM v$database;
-- 制御ファイル/REDOログ構成
SELECT name FROM v$controlfile;
SELECT group#, thread#, bytes/1024/1024 AS mb, members, archived, status FROM v$log ORDER BY group#;
SELECT group#, member FROM v$logfile ORDER BY group#;
確認用
Q. Oracle DB DBA系
関連
参考
メモ
調査用
Wikipedia.icon
Wikipedia.icon